﻿#region Copyright (c) 2006-2009 Widgetsphere LLC, All Rights Reserved
//--------------------------------------------------------------------- *
//                          Widgetsphere  LLC                           *
//             Copyright (c) 2006-2009 All Rights reserved              *
//                                                                      *
//                                                                      *
//This file and its contents are protected by United States and         *
//International copyright laws.  Unauthorized reproduction and/or       *
//distribution of all or any portion of the code contained herein       *
//is strictly prohibited and will result in severe civil and criminal   *
//penalties.  Any violations of this copyright will be prosecuted       *
//to the fullest extent possible under law.                             *
//                                                                      *
//THE SOURCE CODE CONTAINED HEREIN AND IN RELATED FILES IS PROVIDED     *
//TO THE REGISTERED DEVELOPER FOR THE PURPOSES OF EDUCATION AND         *
//TROUBLESHOOTING. UNDER NO CIRCUMSTANCES MAY ANY PORTION OF THE SOURCE *
//CODE BE DISTRIBUTED, DISCLOSED OR OTHERWISE MADE AVAILABLE TO ANY     *
//THIRD PARTY WITHOUT THE EXPRESS WRITTEN CONSENT OF WIDGETSPHERE LLC   *
//                                                                      *
//UNDER NO CIRCUMSTANCES MAY THE SOURCE CODE BE USED IN WHOLE OR IN     *
//PART, AS THE BASIS FOR CREATING A PRODUCT THAT PROVIDES THE SAME, OR  *
//SUBSTANTIALLY THE SAME, FUNCTIONALITY AS ANY WIDGETSPHERE PRODUCT.    *
//                                                                      *
//THE REGISTERED DEVELOPER ACKNOWLEDGES THAT THIS SOURCE CODE           *
//CONTAINS VALUABLE AND PROPRIETARY TRADE SECRETS OF WIDGETSPHERE,      *
//INC.  THE REGISTERED DEVELOPER AGREES TO EXPEND EVERY EFFORT TO       *
//INSURE ITS CONFIDENTIALITY.                                           *
//                                                                      *
//THE END USER LICENSE AGREEMENT (EULA) ACCOMPANYING THE PRODUCT        *
//PERMITS THE REGISTERED DEVELOPER TO REDISTRIBUTE THE PRODUCT IN       *
//EXECUTABLE FORM ONLY IN SUPPORT OF APPLICATIONS WRITTEN USING         *
//THE PRODUCT.  IT DOES NOT PROVIDE ANY RIGHTS REGARDING THE            *
//SOURCE CODE CONTAINED HEREIN.                                         *
//                                                                      *
//THIS COPYRIGHT NOTICE MAY NOT BE REMOVED FROM THIS FILE.              *
//--------------------------------------------------------------------- *
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Widgetsphere.Generator.Common.GeneratorFramework;
using System.Xml;
using Widgetsphere.Generator.Common.Util;
using System.IO;

namespace Widgetsphere.Generator.Common
{
	[Serializable()]
	public class ModelCacheFile
	{
		#region Class Members

		IGenerator _root = null;
		private List<string> _excludeList = new List<string>();
		private int _generatedVersion = 0;

		#endregion

		#region Constructor

		public ModelCacheFile(IGenerator root)
		{
			if (root == null)
				throw new Exception("The root element cannot be null");

			_root = root;
			this.Load();
		}

		#endregion

		#region Properties

		public List<string> ExcludeList
		{
			get { return _excludeList; }
		}

		public int GeneratedVersion
		{
			get { return _generatedVersion; }
			set { _generatedVersion = value; }
		}

		public string FileName
		{
			get
			{
				string fileName = _root.FileName;
				System.IO.FileInfo fi = new System.IO.FileInfo(fileName);
				if (fi.Exists)
				{
					//Get file name
					string name = fi.Name + ".info";
					fileName = System.IO.Path.Combine(fi.DirectoryName, name);
					return fileName;
				}
				else return "";
			}
		}

		#endregion

		#region Methods

		public void Save()
		{
			XmlDocument document = new XmlDocument();
			document.LoadXml("<configuration></configuration>");

			//Save GeneratedVersion
			XmlHelper.AddAttribute(document.DocumentElement, "GeneratedVersion", this.GeneratedVersion.ToString());

			//Save ExcludeList
			XmlNode exludeListNode = XmlHelper.AddElement(document.DocumentElement, "excludeList");
			foreach (string key in this.ExcludeList)
			{
				XmlHelper.AddElement((XmlElement)exludeListNode, "item", key);
			}

			document.Save(this.FileName);
		}

		public void Load()
		{
			XmlDocument document = new XmlDocument();
			if (!File.Exists(this.FileName)) return;
			document.Load(this.FileName);

			//Get GeneratedVersion
			_generatedVersion = int.Parse(XmlHelper.GetAttributeValue(document.DocumentElement, "GeneratedVersion", _generatedVersion.ToString()));

			//Get ExcludeList
			this.ExcludeList.Clear();
			XmlNode exludeListNode = XmlHelper.GetElement(document.DocumentElement, "excludeList");
			if (exludeListNode != null)
			{
				foreach (XmlNode node in exludeListNode.ChildNodes)
				{
					this.ExcludeList.Add(node.InnerText);
				}
			}
		}

		#endregion

	}
}
